<参考>良いコード 悪いコード

右のコードと左のコードは、まったく同じことをするプログラム
どっちのほうがいいコード?(コピペしてVSコードで比較してみよう)

import sys
import time

# フルーツリストの中身を表示
def display_fruits(fruits):
    print("現在のフルーツリスト:")
    for fruit in fruits:
        print(fruit)

# フルーツリストに新たなフルーツを追加
def add_fruits(fruits):
    fruit = input("追加するフルーツ:")
    if fruit in fruits:
        print(f"{fruit}はすでにリストに入っています。")
    else:
        fruits.append(fruit)
        print(fruit + "をリストに追加しました。")

# フルーツリストから指定のフルーツを削除
def remove_fruit(fruits):
    fruit = input("削除するフルーツ:")
    if fruit in fruits:
        fruits.remove(fruit)
        print(fruit + "をリストから削除しました。")
    else:
        print(fruit + "はリストにありません。")

# フルーツリストの中のアイテムを数える
def count_fruits(fruits):
    print("リストには" + str(len(fruits)) + "種類の果物があります。")

# メインプログラム
def main():
    fruits = ["apple", "banana", "cherry"]  # フルーツリストの初期値
    display_fruits(fruits)
    
    while True:
        """
        アルファベット1文字のコマンドで、それぞれに対応した機能を実行
        a:追加
        r:削除
        d:表示
        c:カウント
        """

        # 各コマンドの機能の説明を表示
        setsumei = "コマンドを入力してください\n"\
                        "a:フルーツを追加\n"\
                        "r:フルーツを削除\n"\
                        "d:フルーツをリストを表示\n"\
                        "c:フルーツをリストの中の数を表示\n"\
                        "コマンド:"
        command = input(setsumei)
        
        # それぞれのコマンドに対応した関数を実行
        match command:
            case "a":
                add_fruits(fruits)

            case "r":
                remove_fruit(fruits)

            case "d":
                display_fruits(fruits)

            case "c":
                count_fruits(fruits)

            case "q":
                sys.exit()

            case _:
                print("コマンドが間違っています。")

        # 区切り線を表示
        print("---------------------------")

        # 次のコマンド入力まで2秒待つ
        time.sleep(2.0)

if __name__ == "__main__":
    main()

import sys
import time

def hyouji_fruits(fruits):
    for fruit in fruits:
        print("好きな果物は" + fruit + "です。")
def add_fruits(fruits, fruit):
    fruits.append(fruit)
    print(fruit + "をリストに追加しました。")
def remove_fruit(fruits, fruit):
    if fruit in fruits:
        fruits.remove(fruit)
        print(fruit + "をリストから削除しました。")
    else:
        print(fruit + "はリストにありません。")
def count_fruits(fruits):
    print("リストには" + str(len(fruits)) + "種類の果物があります。")
def main():
    fruits = ["apple", "banana", "cherry"]
    hyouji_fruits(fruits)
    while True:
        setsumei = "コマンドを入力してください"\
                        "a:フルーツを追加\nr:フルーツを削除"\
                        "d:フルーツをリストを表示"\
                        "c:フルーツをリストの中の数を表示"
        command = input(setsumei)
        match command:
            case "a":
                fruit = input("追加するフルーツ:")
                add_fruits(fruits, fruit)
            case "r":
                fruit = input("追加するフルーツ:")
                remove_fruit(fruits, fruit)
            case "d":
                hyouji_fruits(fruits)
            case "c":
                count_fruits(fruits)
            case "q":
                sys.exit()
        print("---------------------------")
        time.sleep(2.0)
if __name__ == "__main__":
    main()
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

<コメント>

コードのどの部分がどういう機能か、コメントが入っているのでわかりやすい

<改行>

機能ごとにまとまっていて、別の機能との間に改行が入っているのでみやすい

<コメント>

なんの説明も書いていないので、プログラムを理解するのに時間がかかる

<改行>

ぎゅうぎゅうづめになっているので、読みづらい
よ

良いコードのポイント

①コメントを使う

コードがどういう動きをするのか説明する。他人が見てもわかるように、またあとで自分が見直したときにわかるように。

②変数名などの名前のルールを統一する

英語を使うか日本語を使うか

RickyShincyou とするか、ricky_shincyou とするかなど

③Pythonのかきかたルールに従う

pythonには、PEP8というルールが存在します。

④フォーマッタを使う

vsコードの機能で、ある程度自動でコードをきれいにしてくれる機能があるので、積極的に使う。

Copyright © 2020 8ackathon All rights reserved.